package com.tepth.remote.control.delegate.home;

import com.tepth.remote.control.base.bean.SubordinateCount;
import com.tepth.remote.control.base.bean.SubordinateGps;
import com.tepth.remote.control.base.mvp.BaseModel;
import com.tepth.remote.control.base.mvp.BasePresenter;
import com.tepth.remote.control.base.mvp.BaseView;
import com.tepth.remote.core.net.callback.IError;
import com.tepth.remote.core.net.callback.ISoapSuccess;
import com.tepth.remote.core.net.callback.ISuccess;

import java.util.ArrayList;
import java.util.WeakHashMap;

/**
 * Description:
 *
 * @author Hequn.Lee
 * @date 2018/11/8
 */
public interface HomeContract {

    interface View extends BaseView {
        /**
         * 获取下属人员数量成功
         *
         * @param number 数量
         */
        void getSubordinateNumberSuccess(SubordinateCount number);

        /**
         * 获取下属人员数量失败
         *
         * @param code 错误码
         * @param msg  错误信息
         */
        void getSubordinateNumberFailed(int code, String msg);

        /**
         * 获取下属人员GPS信息成功
         *
         * @param subordinates 数量
         */
        void getSubordinateGpsSuccess(ArrayList<SubordinateGps> subordinates);

        /**
         * 获取下属人员GPS信息失败
         *
         * @param code 错误码
         * @param msg  错误信息
         */
        void getSubordinateGpsFailed(int code, String msg);

        void detectionSuccess(String result);

        void detectionFailed(int code, String msg);
    }

    interface Model extends BaseModel {
        /**
         * 获取下属人员数量
         *
         * @param params     参数集合
         * @param methodName 方法名
         * @param nameSpace  命名空间
         * @param success    成功回调
         * @param error      错误回调
         */
        void getSubordinate(WeakHashMap<String, Object> params,
                            String methodName,
                            String nameSpace,
                            ISoapSuccess success,
                            IError error);

        /**
         * 获取版本号
         *
         * @param url     地址
         * @param success 成功
         * @param error   失败
         */
        void getVersion(String url,
                        ISuccess success,
                        IError error);
    }

    abstract class AbstractPresenter extends BasePresenter {

        /**
         * 获取下属人员数量
         *
         * @param uid uid
         */
        abstract void getSubordinateNumber(String uid);

        /**
         * 获取下属人员数量
         *
         * @param uid uid
         */
        abstract void getSubordinateGpsInfo(String uid);

        /**
         * 检查版本号
         */
        abstract void detectionVersion();
    }
}
